package com.jl15988.chainlog.example;

import com.jl15988.chainlog.callback.ChainMethodCallback;
import com.jl15988.chainlog.model.ChainApiLog;
import com.jl15988.chainlog.model.ChainMethodLog;
import org.springframework.stereotype.Component;

/**
 * 自定义链式监控回调实现示例
 */
@Component
public class CustomChainMethodCallback implements ChainMethodCallback {

    @Override
    public void onChainComplete(ChainMethodLog chainMethodLog, ChainApiLog chainApiLog, ChainMethodLog parentChainMethodLog) {
        // 自定义处理逻辑
        System.out.println("=== 自定义链式监控 ===");
        System.out.println("链式ID: " + chainMethodLog.getId());
        System.out.println("父级ID: " + chainMethodLog.getParentId());
        System.out.println("接口ID: " + chainApiLog.getId());
        System.out.println("方法名: " + chainMethodLog.getMethod());
        System.out.println("监控名: " + chainMethodLog.getName());
        System.out.println("调用层级: " + chainMethodLog.getLevel());
        System.out.println("执行时长: " + chainMethodLog.getDuration() + "ms");

        if (parentChainMethodLog != null) {
            System.out.println("上级方法: " + parentChainMethodLog.getMethod());
        }

        // 可以在这里实现：
        // 1. 构建调用链路图
        // 2. 分析方法性能
        // 3. 统计调用次数
        // 4. 生成链路追踪数据
        // 5. 检测性能瓶颈等

        // 示例：性能分析（伪代码）
        if (chainMethodLog.getDuration() > 100) {
            System.out.println("⚠️ 慢方法告警: " + chainMethodLog.getMethod() + " 耗时 " + chainMethodLog.getDuration() + "ms");
            // performanceAnalyzer.analyze(chainInfo);
        }

        // 示例：构建调用链（伪代码）
        // callChainBuilder.addNode(chainInfo, chainApiLog, parentChainMethodLog);

        System.out.println("========================");
    }

    @Override
    public void onChainException(ChainMethodLog chainMethodLog, ChainApiLog chainApiLog,
                                        ChainMethodLog parentChainMethodLog, Throwable exception) {
        // 异常处理逻辑
        System.out.println("=== 链式监控异常 ===");
        System.out.println("链式ID: " + chainMethodLog.getId());
        System.out.println("方法名: " + chainMethodLog.getMethod());
        System.out.println("异常信息: " + exception.getMessage());

        // 可以在这里实现：
        // 1. 记录异常调用链
        // 2. 分析异常传播路径
        // 3. 统计异常方法
        // 4. 触发异常告警等

        // 示例：异常链路分析（伪代码）
        // exceptionChainAnalyzer.analyze(chainMethodLog, apiInfo, parentChainMethodLog, exception);

        System.out.println("==================");
    }
}